package it.bela.pgcdc.common.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import it.bela.pgcdc.common.bean.BaseBean;
import it.bela.pgcdc.common.dao.BaseDao;
import it.bela.pgcdc.common.dao.impl.AbstractBaseDao;
import it.bela.pgcdc.common.exception.ServiceException;
import it.bela.pgcdc.common.service.BaseService;
import it.bela.pgcdc.common.utils.Utilities;

import org.apache.log4j.Logger;

@Service
@Transactional(rollbackFor = ServiceException.class)
public abstract class AbstractBaseService<T extends BaseBean> implements BaseService<T> {
	
//	private static final Logger log = Logger.getLogger(AbstractBaseService.class);
//	
//	@Autowired(required = true)
//	private BaseDao<T> baseDao;
//
//	private boolean hasValidKey(BaseBean baseBean) {
//		return (baseBean.getId() != 0);
//	}
//
////	public List<T> list() throws ServiceException {
////		
////		try {
////			log.debug("Start list");
////			
////			BaseBean baseBean = new BaseBean();
////			
////			baseBean = (T) Utilities.setDefaultParametersSelect(baseBean);
////			
////			@SuppressWarnings("unchecked")
////			List<T> list = baseDao.findByExample(baseBean);
////			
////			log.debug("End list");
////			
////			return list;
////
////		} catch (Exception e) {
////			log.debug("findByExample failed" + e.getMessage(), e);
////			throw new ServiceException(e);
////		}
////	}
//
//	public boolean delete(T baseBean) throws ServiceException {
//		log.debug(baseBean.getClass().toString() + " - Start delete");
//		
//		String message = baseBean.getClass().toString() + " - delete BaseBean failed.";
//		try {
//			if (!hasValidKey(baseBean)) {
//				String messageInner = message + " Oggetto senza id.";
//				log.debug(messageInner);
//				throw new ServiceException(messageInner);
//			}
//			
//			baseBean = (T) baseDao.findById(baseBean.getClass(), baseBean.getId());
//			baseDao.delete(baseBean);
//			
//			log.debug(baseBean.getClass().toString() + " - End delete BaseBean");
//			return true;
//		} catch (Exception e) {
//			log.debug(message + e.getMessage(), e);
//			throw new ServiceException(e);
//		}
//	}
//
//	public boolean persist(T baseBean) throws ServiceException {
//		log.debug(baseBean.getClass().toString() + " - Start persist BaseBean");
//		
//		String message = baseBean.getClass().toString() + " - persist BaseBean failed.";
//		try {
//			
//			baseBean = (T) Utilities.setDefaultParametersInsert(baseBean);
//			baseDao.persist(baseBean);
//			
//			log.debug(BaseBean.class.toString() + " - End persist BaseBean");
//			return true;
//		} catch (Exception e) {
//			log.debug(message + e.getMessage(), e);
//			throw new ServiceException(e);
//		}
//	}
//	
//	public boolean save(T baseBean) throws ServiceException {
//		log.debug(baseBean.getClass().toString() + " - Start save BaseBean");
//		
//		String message = BaseBean.class.toString() + " - save BaseBean failed.";
//		try {
//			
//			baseBean = (T) Utilities.setDefaultParametersInsert(baseBean);
//			baseDao.save(baseBean);
//			
//			log.debug(BaseBean.class.toString() + " - End save BaseBean");
//			return true;
//		} catch (Exception e) {
//			log.debug(message + e.getMessage(), e);
//			throw new ServiceException(e);
//		}
//	}
//	
//	public boolean merge(T baseBean) throws ServiceException {
//		log.debug(BaseBean.class.toString() + " - Start merge BaseBean");
//		
//		String message = BaseBean.class.toString() + " - merge BaseBean failed.";
//		try {
//			if (!hasValidKey(baseBean)) {
//				String messageInner = message + " Oggetto senza id.";
//				log.debug(messageInner);
//				throw new ServiceException(messageInner);
//			}
//			
//			baseBean = (T) Utilities.setDefaultParametersUpdate(baseBean);
//			baseDao.merge(baseBean);
//			
//			log.debug(BaseBean.class.toString() + " - End merge BaseBean");
//			return true;
//		} catch (Exception e) {
//			log.debug(message + e.getMessage(), e);
//			throw new ServiceException(e);
//		}
//	}
//	
//	public T findById(Class<T> classe, Long id)throws ServiceException {
//		log.debug(BaseBean.class.toString() + " - Start findById BaseBean");
//		
//		String message = BaseBean.class.toString() + " - findById BaseBean failed.";
//		try {
//			
//			T baseBean = (T) baseDao.findById(classe, id);
//			
//			log.debug(BaseBean.class.toString() + " - End findById BaseBean");
//			return baseBean;
//		} catch (Exception e) {
//			log.debug(message + e.getMessage(), e);
//			throw new ServiceException(e);
//		}
//	}
//
//	@Override
//	public List<T> findByExample(T baseBean) throws ServiceException {
//		try {
//			log.debug("Start list");
//			
//			baseBean = (T) Utilities.setDefaultParametersSelect(baseBean);
//			
//			@SuppressWarnings("unchecked")
//			List<T> list = baseDao.findByExample(baseBean);
//			
//			log.debug("End list");
//			
//			return list;
//
//		} catch (Exception e) {
//			log.debug("findByExample failed" + e.getMessage(), e);
//			throw new ServiceException(e);
//		}
//	}
 
}
